package es.ucm.fdi.xtremeaudio.modelo.beans;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * <ul>
 * <li><b>Proyecto:</b> XtremeAudio</li>
 * <li><b>Grupo:</b> 7 <i>(4&deg;B)</i></li>
 * <li><b>Asignatura:</b> Ingenier&iacute;a del Software</li>
 * <li><b>Curso:</b> 2010/2011</li>
 * <li><b>Centro:</b> Universidad Complutense de Madrid</li>
 * </ul>
 * 
 * La clase <b>Playlist</b> representa una lista de reproducci&oacute;n perteneciente a
 * la biblioteca. Para ello se sirve de una lista de identificadores asociados a
 * cada canci&oacute;n de la lista general de canciones de la misma.
 * 
 * @author &Aacute;lvaro G&oacute;mez Porris
 * @author Elena Hern&aacute;ndez Delgado
 * @author Mar&iacute;a Trinidad Mart&iacute;n Campos
 * @author Mois&eacute;s Mart&iacute;nez Montes
 * @author Mat&iacute;as Salinero Delgado
 * 
 * @version %I%, %G%
 * 
 * @since 1.0
 * 
 * @see Biblioteca
 * @see Cancion
 */
public class Playlist {

	private ArrayList<Integer> canciones = new ArrayList<Integer>();
	private int id = -1;
	private int indiceActual = -1;
	private String nombre = "";
	private String ruta = "";

	/**
	 * Constructora por defecto.
	 */
	public Playlist() {
	}

	/**
	 * Constructora con argumentos.
	 * 
	 * @param id
	 *            El identificador de lista respecto a la biblioteca.
	 * @param canciones
	 *            La lista de canciones.
	 * @param nombre
	 *            El nombre.
	 * @param ruta
	 *            La ruta.
	 * @param indiceActual
	 *            El &iacute;ndice de la canci&oacute;n actual de la lista.
	 */
	public Playlist(int id, ArrayList<Integer> canciones, String nombre,
			String ruta, int indiceActual) {
		this.id = id;
		this.canciones = canciones;
		this.nombre = nombre;
		this.ruta = ruta;
		this.indiceActual = indiceActual;
	}

	/**
	 * Indica si la canci&oacute;n asociada al identificador dado (respecto a la
	 * biblioteca) existe en la lista.
	 * 
	 * @param id
	 *            El identificador de la canci&oacute;n a buscar.
	 * 
	 * @return La existencia o no de la canci&oacute;n.
	 * 
	 * @see Biblioteca
	 * @see Cancion
	 */
	public boolean existeCancion(int id) {
		if (canciones.size() > 0) {
			Iterator<Integer> it = canciones.iterator();
			while (it.hasNext()) {
				Integer idNext = it.next();
				if (id == idNext) {
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * Accesora de {@link #canciones}.
	 * 
	 * @return La lista de canciones.
	 */
	public ArrayList<Integer> getCanciones() {
		return canciones;
	}

	/**
	 * Accesora de {@link #id}.
	 * 
	 * @return El identificador de la lista respecto a la biblioteca.
	 * 
	 * @see Biblioteca
	 */
	public int getId() {
		return id;
	}

	/**
	 * Obtiene el identificador (respecto a la biblioteca) de la canci&oacute;n
	 * actual.
	 * 
	 * @return El identificador.
	 * 
	 * @see Biblioteca
	 */
	public Integer getIdActual() {
		return canciones.get(indiceActual);
	}

	/**
	 * Obtiene el identificador (respecto a la biblioteca) de la canci&oacute;n
	 * en la posici&oacute;n indicada de la lista.
	 * 
	 * @param pos
	 *            El &iacute;ndice de la cancioacute;n en la lista.
	 * 
	 * @return El identificador.
	 * 
	 * @see Biblioteca
	 */
	public Integer getIdCancion(int pos) {
		return canciones.get(pos);
	}

	/**
	 * Accesora de {@link #indiceActual}.
	 * 
	 * @return El &iacute;ndice de la cancioacute;n actual.
	 */
	public int getIndiceActual() {
		return indiceActual;
	}

	/**
	 * Accesora de {@link #nombre}.
	 * 
	 * @return El nombre.
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Accesora de {@link #ruta}.
	 * 
	 * @return La ruta.
	 */
	public String getRuta() {
		return ruta;
	}

	/**
	 * Modificadora de {@link #canciones}.
	 * 
	 * @param canciones
	 *            La nueva lista de canciones.
	 * 
	 * @see Cancion
	 */
	public void setCanciones(ArrayList<Integer> canciones) {
		this.canciones = canciones;
	}

	/**
	 * Modificadora de {@link #id}.
	 * 
	 * @param id
	 *            El nuevo identificador de lista (respecto a la biblioteca).
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Modificadora de {@link #indiceActual}.
	 * 
	 * @param indiceActual
	 *            El nuevo &iacute;ndice actual.
	 */
	public void setIndiceActual(int indiceActual) {
		this.indiceActual = indiceActual;
	}

	/**
	 * Modificadora de {@link #nombre}.
	 * 
	 * @param nombre
	 *            El nuevo nombre.
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * Modificadora de {@link #ruta}.
	 * 
	 * @param ruta
	 *            La nueva ruta.
	 */
	public void setRuta(String ruta) {
		this.ruta = ruta;
	}

}